草庐IT

Java final 与 C++ const

全部标签

c++ - 哪个是正确的 : vector<const string> OR const vector<string>?

哪个是正确的:vector或者constvector?我想创建一个std::vector的std::strings,我不会对其进行更改。但我不确定这两种方式中哪一种更好以及为什么。 最佳答案 如果您只有这两个选择并且您希望程序编译,请使用conststd::vector.如果您不介意编译错误(在GCC4.8和Clang上),可能是因为conststd::string不符合CopyAssignable的要求(在C++11之前)或MoveAssignable(C++11起),尽管apparently,这主要是因为它不是Destructi

c++ - Const 方法 - 在实现中重复?

我一直在寻找答案,但始终找不到。假设我有:classfoobar{public:charfoo()const;};,在我的foobar.h中当我想在foobar.cpp中实现这个类时,我应该重复const吗?:charfoobar::foo()const{//...mycode}或者我可以做吗(没有const)charfoobar::foo(){//...mycode}如果这是重复的,我很抱歉,但没有其他问题真正回答了这个问题。 最佳答案 是的,您必须在定义中包含const限定符。如果你写:classFoo{public:intf(

c++ - 有什么区别 - const int x = 5000;和 const int x = 50'00;在 C++ 中?

下面的c++代码有什么区别-constintx=5000;constintx=50'00; 最佳答案 50'00使用digitseparator这是在C++14中添加的。该数字将解析为5000,唯一的区别是它可能更易于阅读。通常您会使用数字分隔符来分隔千位,例如1'000'000,但您可以在数字中的任何位置使用它。 关于c++-有什么区别-constintx=5000;和constintx=50'00;在C++中?,我们在StackOverflow上找到一个类似的问题:

c++ - 在 C++ 中声明 const 指针是否常见?

C++风格指南强烈建议如果我们不打算修改对象,则应将对象声明为const。因此,当我们声明一个指向不会被重新分配的对象/变量的指针时,我们应该将其声明为常量:T*constpObject=newT();C++开发人员似乎通常不会在指针的情况下遵循此规则,是吗? 最佳答案 指针是一个对象。如果您希望防止修改指针持有的值,即使其在其生命周期内仅持有一个地址,那么可以将其设为常量。适用于任何其他对象类型的相同注意事项也适用于此。我怀疑您可能看不到它的原因是C++中的声明符语法有点让输入起来不舒服。更不用说pointee是否为const通常

c++ - const 是否需要类型说明符?

这里需要类型说明符吗?constc=7;BjarneStroustrup的“C++编程语言”第80页说这是非法的。但是,我一直在练习一些brainbench测试,其中一个问题指出类型默认为int。Brainbench通常是正确的,所以我不确定哪个引用是正确的,而且我一直无法在标准中找到任何内容。有没有人有明确的答案和引用? 最佳答案 int的默认类型对C有效,但对C++无效。即使在C中,也应该避免这种编码风格。另请注意,BjarneStroustrup的书是标准C++最权威的引用书之一。

c++ - 由 const std::unique_ptr 管理的对象的生命周期

我在std::unique_ptrreference中看到以下注释:Onlynon-constunique_ptrcantransfertheownershipofthemanagedobjecttoanotherunique_ptr.Thelifetimeofanobjectmanagedbyconststd::unique_ptrislimitedtothescopeinwhichthepointerwascreated.有谁能举例说明一下吗?我不明白为什么。 最佳答案 您根本无法从conststd::unique_ptr移动,

c++ - find_if 不适用于 const_iterator

我写了这个程序://splitsasentenceintowords#include#include#include#include"spacefunc.h"usingstd::string;usingstd::cout;usingstd::endl;usingstd::find_if;intmain(){typedefstring::const_iteratoriter;stringinput="Thisisme";iteri=input.begin();while(i!=input.end()){iterj;i=find_if(i,input.end(),notspace);j=f

c++ - C++ 中的临时对象确实是 const 吗?

我一直认为C++中的临时对象会被编译器自动视为const。但是最近我遇到了以下代码示例:function_returning_object().some_non_const_method();对C++编译器有效。这让我想知道——C++中的临时对象确实是const吗?如果是,那么为什么上面的代码被编译器认为是正确的? 最佳答案 不,他们不是。除非您将返回类型声明为const。 关于c++-C++中的临时对象确实是const吗?,我们在StackOverflow上找到一个类似的问题:

c++ - Const 变量随 C 中的指针改变

变量i被声明为const但我仍然可以使用指向它的内存位置的指针来更改值。怎么可能?intmain(){constinti=11;int*ip=&i;*ip=100;printf("%d\n",*ip);printf("%d\n",i);}当我编译时,我收到这个警告:test.c:Infunction‘main’:test.c:11:warning:initializationdiscardsqualifiersfrompointertargettype输出是这样的100100 最佳答案 const是一个编译时特性。它不会阻止你搬起石

c++ - C++ 中内置类型的 const 修饰符的开销

我更喜欢将const修饰符添加到我编写的函数中的所有内置参数。例如:voidfoo(constintarg1,constdoublearg2);对我来说比:voidfoo(intarg1,doublearg2);代码审查后,我得知const修饰符在应用于整数和内置类型时会带来开销。这是真的吗?为什么?谢谢, 最佳答案 它的开销并不比typedef多。你的同事错了。如果您想说服他,请打印出两个变体的反汇编代码,并向您的同事展示它们是相同的。但是,像这样向原始类型添​​加const限定符是完全没有意义和徒劳的。不管怎样,它们都是被复制的